package com.lihao.sam.service.impl;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.lihao.sam.dao.CheckMangeDao;
import com.lihao.sam.entity.CheckMange;
import com.lihao.sam.service.intf.CheckMangeService;
import com.lihao.sam.vo.PageVo;
import com.lihao.sam.vo.R;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * *  作者:陈国强
 * *  日期:2022/11/23 15:29
 * *  文件描述:退房管理
 */
@Service
public class CheckMangeServiceImpl implements CheckMangeService {
    @Resource
    private CheckMangeDao dao;
    /**
     * 增加*/
    @Override
    public R add(CheckMange mange) {
        //1.校验参数
        if(mange!=null){
            //2.操作数据库
            if(dao.add(mange)>0){
                return R.ok();
            }
        }
        return R.fail();
    }

    /**
     * 修改*/
    @Override
    public R update(CheckMange mange) {
        //1.校验参数
        if(mange!=null){
            //2.操作数据库
            if(dao.update(mange)>0){
                return R.ok();
            }
        }
        return R.fail();
    }

    /**
     * 删除*/
    @Override
    public R delete(int id) {
        //1.校验参数
        if(id>0){
            //2.操作数据库
            if(dao.delete(id)>0){
                return R.ok();
            }
        }
        return R.fail();
    }

    /**
     * 模糊查询*/
    @Override
    public PageVo queryPage(String stuId, String name,String address ,int page, int limit) {
        //1.开启分页
        PageHelper.startPage(page,limit);
        //2.开始查询
        PageInfo<CheckMange> pageInfo=new PageInfo<>(dao.selectByWhere(stuId,name,address));
        //3.返回对应的结果
        return PageVo.ok(pageInfo.getTotal(),pageInfo.getList());
    }

    //实现Excel文件的导入：1.文件上传 2.解析Excel -读取 3.操作数据库
    @Override
    public R importData(MultipartFile file) throws IOException {
        //1.验证文件是否为空
        if(!file.isEmpty()){
            //2.获取文件内容
            InputStream is =file.getInputStream();
            //3.解析Excel 集合
            List<CheckMange> list= EasyExcel.read(is, CheckMange.class, new ReadListener() {
                @Override
                public void invoke(Object o, AnalysisContext analysisContext) {
                }
                @Override
                public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                }
            }).sheet().doReadSync();
            //4.Mybatis 批量新增
            if(dao.addBatch(list)>0){
                //成功
                return R.ok();
            }
        }
        return R.fail();
    }

    @Override
    public void exportData(HttpServletResponse response) throws IOException {
        //1.设置下载的文件名
        String fn="退房登记_"+System.currentTimeMillis()+".xlsx";
        //2.设置响应消息头 实现文件下载
        response.setHeader("content-disposition","attachment;filename="+fn);
        //3.写出要下载的内容
        EasyExcel.write(response.getOutputStream(), CheckMange.class).
                sheet().doWrite(dao.selectAll());
    }
}
